<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
    <title>开发指南-未完待续 - Zexun Luo | 罗泽勋</title>
    <meta property="og:title" content="开发指南-未完待续 - Zexun Luo | 罗泽勋">
    
    <meta name="twitter:card" content="summary">

    
      
    

    
      
      <meta property="description" content="提高质量和生产率是软件工程要解决的核心问题。
软件开发：正确性、健壮性、可靠性、效率、易用性、可读性（可理解性）、可扩展性、可复用性、兼容性、可移植性等。
只记录实际目前为止比较困惑的。
[&amp;hellip;] 1.为了防止头文件被重复引用，应当用 ifndef/define/endif 结构产生预处理块。
2.用 #include&amp;lt;filename.h&amp;gt;格式来引用非标准库的头文件（编译 &amp;hellip;">
      <meta property="og:description" content="提高质量和生产率是软件工程要解决的核心问题。
软件开发：正确性、健壮性、可靠性、效率、易用性、可读性（可理解性）、可扩展性、可复用性、兼容性、可移植性等。
只记录实际目前为止比较困惑的。
[&amp;hellip;] 1.为了防止头文件被重复引用，应当用 ifndef/define/endif 结构产生预处理块。
2.用 #include&amp;lt;filename.h&amp;gt;格式来引用非标准库的头文件（编译 &amp;hellip;">
      
    

    
    
    
    <meta name="twitter:image" content="/images/logo.png">
    
    

    

    
    

    <link rel="stylesheet" href="/css/style.css" />
    <link rel="stylesheet" href="/css/fonts.css" />
    
<link rel="stylesheet" href="/css/custom.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer@1.10.0/dist/APlayer.min.css">  

  </head>

  
  <body class="post">
    <div id="pjax-content">
    <header class="masthead">
      

<h1><a href="/"><img src="/images/logo.png" alt="Zexun Luo" /></a></h1>



      <nav class="menu">
  <ul>
  
  
  <li><a href="/">主页</a></li>
  
  <li><a href="/about/">关于</a></li>
  
  <li><a href="/blog/">日志</a></li>
  
  <li><a href="/post/">技术</a></li>
  
  

  </ul>
</nav>

    </header>
    <article class="main">
      <header class="title">
      
<h1>开发指南-未完待续</h1>


<h3>罗泽勋 / 
2021-07-16</h3>

<hr>


      </header>



<p>提高质量和生产率是软件工程要解决的核心问题。</p>
<p>软件开发：正确性、健壮性、可靠性、效率、易用性、可读性（可理解性）、可扩展性、可复用性、兼容性、可移植性等。</p>
<p>只记录实际目前为止比较困惑的。</p>
<h3 id="头文件的结构">头文件的结构</h3>
<p>1.为了防止头文件被重复引用，应当用 ifndef/define/endif 结构产生预处理块。</p>
<p>2.用 #include&lt;filename.h&gt;格式来引用非标准库的头文件（编译器将会从标准库目录开始搜索；用 #include&lt;Îy &ldquo;filename.h&rdquo; 格式来引用非标准库的头文件（编译器将从用户的工作目录开始搜索）。（注：一般将 &lt;&gt; 格式的放在前， &ldquo;&ldquo;格式的放在后，为了统一风格）</p>
<p>3.头文件只存放“声明”而不存放“定义”。（C++中，类的成员函数可以在声明的同时被定义，并且自动成为内联函数。但这样做会造成风格不一致，弊大于利！</p>
<p>4.不提倡使用全局变量，尽量不要在头文件中出现 extern int value 这类声明。</p>
<h3 id="头文件作用">头文件作用：</h3>
<ul>
<li>
<p>（1）通过头文件来调用库功能。在很多场合，源代码不便（或不准）向用户公布，只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的借口声明来调用库的功能，而不必关心接口怎么实现的。编译器会从库中提取相应的代码。</p>
</li>
<li>
<p>（2）头文件能加强类型安全检查。如果某个接口被实现或被使用时，其方式与头文件中的声明不一致，编译器就会指出错误，这一简单的规则能大大减轻程序员调试、改错的负担。</p>
</li>
</ul>
<h3 id="目录结构">目录结构</h3>
<p>如果一个软件的头文件数目比较多（如超过十个），通常应将头文件和定义文件分别保存于不同的目录，以便于维护。</p>
<p>例如可将头文件保存于 include 目录，将定义文件保存于 source 目录（可以是多级目录）。</p>
<p>如果某些头文件是私有的，它不会被用户的程序直接饮用，则没有必要公开其“声明”，可以把这些私有的头文件和定义文件存放于同一个目录。</p>
<h3 id="空行">空行</h3>
<p>1.类声明之后、函数定义结束之后要加空行。</p>
<p>2.在一个函数体内，逻辑上密切相关的语句之间不加空行，其他地方应加空行分割。</p>
<h3 id="代码行">代码行</h3>
<p>1.一行代码只做一件事情，如只定义一个变量，或只写一条语句。</p>
<p>2.if、for、while、do 等语句自占一行，执行语句不得紧跟其后。不论执行语句有多少都要加{}。这样可以防止书写失误。（注：也为了统一风格）</p>
<p>3.尽可能在定义变量的同时初始化该变量（就近原则）。（注：这样可以减少被野指针折磨的痛苦，强烈建议）</p>
<h3 id="代码行内的空格">代码行内的空格</h3>
<p>1.关键字之后要留一个空格。像 if、for、while 等关键字之后应留一个空格再跟左括号 &lsquo;('，以突出关键字。</p>
<p>2.函数名之后不要留空格，紧跟左括号&rsquo;('，以与关键字区别。</p>
<p>3.'(&lsquo;向后紧跟，')'、‘，’、‘；’向前紧跟，紧跟处不留空格。</p>
<p>4.&rsquo;,&lsquo;之后要留空格，如果&rsquo;;&lsquo;不是一行的结束符号，其后要留空格，如for(initialization; condition; update)。</p>
<p>5.【建议】对于表达式比较长的 for 语句和 if 语句，为了紧凑起见可以适当地去掉一些空格。（注：如果真的长到影响阅读，可以考虑）</p>
<h3 id="对齐">对齐</h3>
<p>1.‘{{’h和‘}}’应独占一行并且位于同一列，同时与引用它们的语句左对齐。</p>
<h3 id="长行拆分">长行拆分</h3>
<p>1.代码行最大长度应控制在 70 至 80 个字符以内。</p>
<p>2.【强烈】长表达式要在低优先级操作符处拆分成新行，操作符放在新行之首。</p>


  
  <nav class="post-nav">
    <span class="nav-prev">&larr; <a href="/post/2021-7-10/">vim 操作备忘</a></span>
    <span class="nav-next"></span>
  </nav>
  <script type="text/javascript">
  document.addEventListener('keyup', function(e) {
    if (e.target.nodeName.toUpperCase() != 'BODY') return;
    var url = false;
    if (e.which == 37) {  
      
      url = '\/post\/2021-7-10\/';
      
    } else if (e.which == 39) {  
      
    }
    if (url) window.location = url;
  });
  </script>
  
  </article>
  </div>
  <footer>
  
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="/js/jquery.pjax.js"></script>
<script src="/js/pjax.config.js"></script>

<div class="music">
<div id="player" class="aplayer"></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/aplayer@1.10.0/dist/APlayer.min.js"></script>  

<script type="text/javascript">
const ap = new APlayer({
    container: document.getElementById('player'),
    order: 'random',
    listFolded: true,
    listMaxHeight: 90,
    theme:	'#b7daff',
    audio: [
    {
        name: 'きこえるかしら',
        artist: '大和田りつこ',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/赤毛のアンOP_きこえるかしら_大和田りつこ.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/赤毛のアンOP_きこえるかしら_大和田りつこ.jpeg'
      },
      {
        name: 'まっててごらん',
        artist: '大杉久美子',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/大杉久美子_ネリー・シュワルツ_まっててごらん.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/大杉久美子_ネリー・シュワルツ_まっててごらん.png'
      },
      {
        name: 'ペリーヌ物語',
        artist: '片头曲和片尾曲',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/世界名作劇場_ペリーヌ物語_OP_ED.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/世界名作劇場_ペリーヌ物語_OP_ED.jpg'
      },
      {
        name: 'ほほえみの魔法',
        artist: 'トラップ一家物語',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/Trapp_Family_Story_Hohoemi_no_mahou_ほほえみの魔法_Smil.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/Trapp_Family_Story_Hohoemi_no_mahou_ほほえみの魔法_Smil.jpg'
      },
      {
        name: 'It is a Small world',
        artist: 'Disney Classics',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/Disney_Classics_It_s_a_Small_World_It_s_a_Small.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/Disney_Classics_It_s_a_Small_World_It_s_a_Small.jpg'
      },
      {
        name: 'Forrest Gump Suite',
        artist: 'Alan Silvestri',
        url: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/music/Alan_Silvestri_Forrest_Gump_Suite2.mp3',
        cover: 'https://cdn.jsdelivr.net/gh/lzxqaq/jsdelivr@master/image/Alan_Silvestri_Forrest_Gump_Suite.jpeg'
      },





  ]
});
</script>




<script async src="/js/fix-toc.js"></script>

<script async src="/js/center-img.js"></script>

<script async src="/js/right-quote.js"></script>

<script async src="/js/no-highlight.js"></script>

<script async src="/js/fix-footnote.js"></script>

<script async src="/js/math-code.js"></script>

<script async src="/js/external-link.js"></script>

<script async src="/js/alt-title.js"></script>

<script async src="/js/header-link.js"></script>




  

  
  <hr>
  <div class="copyright">© <a href="/">Zexun Luo</a> 2020 - 2021</div>
  
  </footer>
  
  </body>
</html>

